package mededelingen.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableModel;

import tools.language.MentionChat;
import dao.mededelingen.DataLayerMededelingen;
import mededelingen.model.Mededelingen;
import mededelingen.model.MededelingenListModel;
import mededelingen.model.Mededelingenlijst;
import mededelingen.view.MededelingenView;
import mededelingen.view.TvView;

public class MededelingController implements ActionListener {

	MededelingenListModel mlm;
	List<Mededelingen> m;
	DataLayerMededelingen dl;
	JTable table;

	public MededelingController(JTable jt, JButton button){ 	
		mlm = (MededelingenListModel) jt.getModel();
		table = jt;
	}

	public void actionPerformed(ActionEvent e) {
		int getRow = table.getSelectedRow();
		TableModel getModel = table.getModel();

		//mededelingen toevoegen aan tabel
		if ("Toevoegen".equals(e.getActionCommand())) {
			DateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String naam 		 = MededelingenView.getInstance().getTxtNaam().getText();
			String beschrijving  = MededelingenView.getInstance().getTxtBeschrijving().getText();
			String begindatum    = date.format(MededelingenView.getInstance().getTxtBegindatum().getValue());
			String einddatum     = date.format(MededelingenView.getInstance().getTxtEinddatum().getValue());

			if(naam.equals("") || beschrijving.equals("") || begindatum.equals("") || einddatum.equals("") ){
				JOptionPane.showMessageDialog(null, "U heeft niet alle velden ingevuld", "Foutmelding", JOptionPane.OK_CANCEL_OPTION);
			}
			else {	
				Mededelingen m = new Mededelingen(0, begindatum, einddatum, naam, beschrijving);
				//id check
				m.getMededeling_id();
				mlm.addRow(m);
				Mededelingen.getInstance().insertInToDB(m);
			}
		}

		//mededelingen bijwerken in tabel
		if ("Bijwerken".equals(e.getActionCommand())) {	
			if(getRow == -1){
				MentionChat.getInstance().errorTable();
			} else {
				int id = (int) getModel.getValueAt(getRow, 0);
				String naam = MededelingenView.getInstance().getTxtNaam().getText();
				String beschrijving = MededelingenView.getInstance().getTxtBeschrijving().getText();
				m = Mededelingenlijst.getInstance().getMd();
				m.get(getRow).setMededeling_id(id);
				m.get(getRow).setNaam(naam);
				m.get(getRow).setBeschrijving(beschrijving);
				m.get(getRow).updateInToDB();

				mlm.update(null, getRow);
				JOptionPane.showMessageDialog(null, "Mededeling is succesvol aangepast.", "Succes", JOptionPane.OK_CANCEL_OPTION);
			}
		}

		//mededelingen verwijderen uit tabel
		if ("Verwijderen".equals(e.getActionCommand())) {
			if(getRow == -1){
				MentionChat.getInstance().errorTable();
			} else {
				int reply = JOptionPane.showConfirmDialog(null, "Weet u zeker dat u deze mededeling wilt verwijderen?", "Let op!", JOptionPane.YES_NO_OPTION);
				if (reply == JOptionPane.YES_OPTION){ 
					Mededelingen.getInstance().deleteMededeling(getModel.getValueAt(getRow, 0).toString());
					mlm.deleteMededeling(getRow);
				}
			}
		}
	}

	//klik op een mededeling om te bewerken
	public void tableKlik(){
		System.out.println(table.getModel().getValueAt(table.getSelectedRow(),1));

		//TODO edit jspinner
//		MededelingenView.getInstance().getTxtBegindatum().setValue(table.getModel().getValueAt(table.getSelectedRow(),1));
//		MededelingenView.getInstance().getTxtEinddatum().setValue(table.getModel().getValueAt(table.getSelectedRow(),2));

		MededelingenView.getInstance().getTxtNaam().setText(table.getModel().getValueAt(table.getSelectedRow(),3).toString());
		MededelingenView.getInstance().getTxtBeschrijving().setText(table.getModel().getValueAt(table.getSelectedRow(),4).toString());
	}
}